#pragma once
#include <iostream>
#include <sys/epoll.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <unordered_map>
#include <string>
#include <vector>

class EchoServer {
public:
    EchoServer(const std::vector<int>& ports, int maxEchoCount = 3);
    ~EchoServer();
    bool init();
    void start();

private:
    void setNonBlocking(int fd);
    int sendAll(int fd, const char* buffer, int len);
    std::vector<int> listenFds_;
    std::vector<int> ports_;
    int epollFd_;
    int totalConnections_;
    const int maxEchoCount_;
    // 优化：使用数组替代哈希表（假设fd不超过10万）
    static const int MAX_FD = 100000;
    int echoCount_[MAX_FD];
    static const int MAX_EVENTS = 65535;  // 增大事件容量
    static const int BUFFER_SIZE = 8192;  // 增大缓冲区
    std::unordered_map<int, std::string> pendingData_;
};